# -*- coding: utf-8 -*-
from BeautifulSoup import BeautifulSoup
import re, time

html = """ <!DOCTYPE html>
<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en"><head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <meta charset="utf-8">
  <link href="../css/combined1.css" rel="stylesheet" type="text/css">
  <link href="../css/print.css" rel="stylesheet" type="text/css" media="print">
  <meta name="keywords" content="chimica, 1, anno, orario, alessandria, Corso di Laurea Chimica  1 anno, 2012, 2 semestre, semestre, orario, orari, orario lezioni, orari lezioni, disit, dipartimento scienze e innovazione tecnologica, alessandria, universita degli studi del piemonte orientale amedeo avogadro, piemonte orientale, amedeo avogardo, avogadro, facolta di scienze m.f.n., facolta di scienze matematiche fisiche e naturali, mfn, upo, unipmn">
  <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9" />
  <title>Corso di Laurea: Chimica  1 anno</title>
</head>

<body>

  <div class="topbanner">
    <div class="upo"><a href="http://www.unipmn.it">Universita degli Studi del Piemonte Orientale "Amedeo Avogadro"</a></div>
    <div class="disit"><a href="http://www.disit.unipmn.it">Dipartimento di Scienze e Innovazione Tecnologica</a></div>
    <div class="orari"><a href="http://orari.disit.unipmn.it">Orari delle Lezioni</a></div>
  </div>

<ul class="menu">
  <li class="menuitem"><a href="/">Home</a></li>
  <li class="menuitem"><a href="../">Indici del semestre</a></li>
  <li class="menuitem"><a href="../index_cdl.html">Corsi di Laurea</a></li>
  <li class="menuitem"><a href="../index_docenti.html">Docenti</a></li>
  <li class="menuitem"><a href="../index_corsi.html">Insegnamenti</a></li>
  <li class="menuitem"><a href="../index_aule.html">Aule</a></li>
</ul>

  <div id="header">
    <p class="facolta">Orario delle lezioni - anno accademico 2012-2013 - 2&deg; semestre</p>
  </div>


  <div id="content">
    <h1>Chimica  1 anno</h1>

    <table class="orario_timetable"><thead><tr>
 <th class="orario_timetable_header">&nbsp;</th>
 <th class="orario_timetable_header" scope="col">09:00 - 11:00</th>
 <th class="orario_timetable_header" scope="col">11:00 - 13:00</th>
 <th class="orario_timetable_header" scope="col">14:00 - 16:00</th>
 <th class="orario_timetable_header" scope="col">16:00 - 18:00</th>
        </tr></thead>
        <tbody>
 <tr class="orario_timetable_row">
  <th class="orario_timetable_header" scope="row"><div class="slot">Luned&igrave;</div></th>
    <td class="orario_timetable_column"><div class="slot"><a href="../modulo/1572.html">MATEMATICA II</a><br><a href="../docente/102.html">Fragnelli Vito</a><br><a href="../room/7.html">DiSIT Aula 202</a></div>
</td>
    <td class="orario_timetable_column"><div class="slot"><a href="../modulo/1564.html">CHIMICA ORGANICA I: CHIMICA ORGANICA I</a><br><a href="../docente/92.html">Tei Lorenzo</a><br><a href="../room/7.html">DiSIT Aula 202</a></div>
</td>
    <td class="orario_timetable_column"><div class="slot"><a href="../modulo/1565.html">CHIMICA ORGANICA I: LABORATORIO DI CHIMICA ORGANICA I</a><br><a href="../docente/76.html">Piscopo Laura</a><br><a href="../room/8.html">DiSIT Aula 203</a></div>
<div class="filler"></div>
<div class="slot"><a href="../modulo/1565.html">CHIMICA ORGANICA I: LABORATORIO DI CHIMICA ORGANICA I</a><br><a href="../docente/76.html">Piscopo Laura</a><br><a href="../room/22.html">DiSIT Laboratorio 330</a></div>
</td>
    <td class="orario_timetable_column"><div class="slot"><a href="../modulo/1565.html">CHIMICA ORGANICA I: LABORATORIO DI CHIMICA ORGANICA I</a><br><a href="../docente/76.html">Piscopo Laura</a><br><a href="../room/22.html">DiSIT Laboratorio 330</a></div>
</td>
 </tr>
 <tr class="orario_timetable_row">
  <th class="orario_timetable_header" scope="row"><div class="slot">Marted&igrave;</div></th>
    <td class="orario_timetable_column">&nbsp;</td>
    <td class="orario_timetable_column">&nbsp;</td>
    <td class="orario_timetable_column"><div class="slot"><a href="../modulo/1565.html">CHIMICA ORGANICA I: LABORATORIO DI CHIMICA ORGANICA I</a><br><a href="../docente/76.html">Piscopo Laura</a><br><a href="../room/22.html">DiSIT Laboratorio 330</a></div>
</td>
    <td class="orario_timetable_column"><div class="slot"><a href="../modulo/1565.html">CHIMICA ORGANICA I: LABORATORIO DI CHIMICA ORGANICA I</a><br><a href="../docente/76.html">Piscopo Laura</a><br><a href="../room/22.html">DiSIT Laboratorio 330</a></div>
</td>
 </tr>
 <tr class="orario_timetable_row">
  <th class="orario_timetable_header" scope="row"><div class="slot">Mercoled&igrave;</div></th>
    <td class="orario_timetable_column"><div class="slot"><a href="../modulo/1572.html">MATEMATICA II</a><br><a href="../docente/102.html">Fragnelli Vito</a><br><a href="../room/8.html">DiSIT Aula 203</a></div>
</td>
    <td class="orario_timetable_column"><div class="slot"><a href="../modulo/1564.html">CHIMICA ORGANICA I: CHIMICA ORGANICA I</a><br><a href="../docente/92.html">Tei Lorenzo</a><br><a href="../room/8.html">DiSIT Aula 203</a></div>
</td>
    <td class="orario_timetable_column"><div class="slot"><a href="../modulo/1565.html">CHIMICA ORGANICA I: LABORATORIO DI CHIMICA ORGANICA I</a><br><a href="../docente/76.html">Piscopo Laura</a><br><a href="../room/8.html">DiSIT Aula 203</a></div>
<div class="filler"></div>
<div class="slot"><a href="../modulo/1565.html">CHIMICA ORGANICA I: LABORATORIO DI CHIMICA ORGANICA I</a><br><a href="../docente/76.html">Piscopo Laura</a><br><a href="../room/22.html">DiSIT Laboratorio 330</a></div>
</td>
    <td class="orario_timetable_column"><div class="slot"><a href="../modulo/1565.html">CHIMICA ORGANICA I: LABORATORIO DI CHIMICA ORGANICA I</a><br><a href="../docente/76.html">Piscopo Laura</a><br><a href="../room/22.html">DiSIT Laboratorio 330</a></div>
</td>
 </tr>
 <tr class="orario_timetable_row">
  <th class="orario_timetable_header" scope="row"><div class="slot">Gioved&igrave;</div></th>
    <td class="orario_timetable_column">&nbsp;</td>
    <td class="orario_timetable_column">&nbsp;</td>
    <td class="orario_timetable_column"><div class="slot"><a href="../modulo/1565.html">CHIMICA ORGANICA I: LABORATORIO DI CHIMICA ORGANICA I</a><br><a href="../docente/76.html">Piscopo Laura</a><br><a href="../room/22.html">DiSIT Laboratorio 330</a></div>
</td>
    <td class="orario_timetable_column"><div class="slot"><a href="../modulo/1565.html">CHIMICA ORGANICA I: LABORATORIO DI CHIMICA ORGANICA I</a><br><a href="../docente/76.html">Piscopo Laura</a><br><a href="../room/22.html">DiSIT Laboratorio 330</a></div>
<div class="filler"></div>
<div class="slot"><a href="../modulo/1999.html">INGLESE</a><br><a href="../docente/319.html">Fadel Sandra</a><br><a href="../room/2.html">DiSIT Aula 102</a></div>
</td>
 </tr>
 <tr class="orario_timetable_row">
  <th class="orario_timetable_header" scope="row"><div class="slot">Venerd&igrave;</div></th>
    <td class="orario_timetable_column">&nbsp;</td>
    <td class="orario_timetable_column">&nbsp;</td>
    <td class="orario_timetable_column"><div class="slot"><a href="../modulo/1565.html">CHIMICA ORGANICA I: LABORATORIO DI CHIMICA ORGANICA I</a><br><a href="../docente/76.html">Piscopo Laura</a><br><a href="../room/22.html">DiSIT Laboratorio 330</a></div>
<div class="filler"></div>
<div class="slot"><a href="../modulo/1999.html">INGLESE</a><br><a href="../docente/319.html">Fadel Sandra</a><br><a href="../room/2.html">DiSIT Aula 102</a></div>
</td>
    <td class="orario_timetable_column"><div class="slot"><a href="../modulo/1565.html">CHIMICA ORGANICA I: LABORATORIO DI CHIMICA ORGANICA I</a><br><a href="../docente/76.html">Piscopo Laura</a><br><a href="../room/22.html">DiSIT Laboratorio 330</a></div>
</td>
 </tr>
        </tbody></table>

  <br>

  <h3>Note</h3>
  <p class="note">Inglese: il corso iniziera il 4 aprile 2013.</p>
  <p class="note">Il Laboratorio di Chimica Organica I si svolge dal 15 aprile al 6 maggio 2013.</p>
  <br />

<p>Eventuali avvisi relativi ai corsi in orario verranno pubblicati sul forum del corso stesso sulla piattaforma di e-learning <a href="https://www.dir.unipmn.it/">Didattica in Rete</a>.</p>
<p>Gli studenti sono invitati ad iscriversi online ai corsi che seguiranno, in modo da poter ricevere avvisi e notizie relative ai propri corsi. (NOTA: alcuni corsi potrebbero non essere al momento presenti sulla piattaforma; il docente fornira ulteriori spiegazioni alla prima lezione del corso.)</p>

  <h3>Docenti di questo semestre:</h3>

  <p><a href="../docente/319.html">Fadel Sandra</a>, <a href="../docente/102.html">Fragnelli Vito</a>, <a href="../docente/92.html">Tei Lorenzo</a>, <a href="../docente/76.html">Piscopo Laura</a></p>

  </div>

  <div class="footer">
    <div id="qfooter">Dipartimento di Scienze e Innovazione Tecnologica
&mdash; Viale Teresa Michel n. 11 &ndash; 15121 Alessandria<br />
Tel: +39 0131360101 &ndash; Fax: 0039 0131360391 &mdash;
Partita IVA 01943490027 &ndash; C.F. 94021400026<br />
    </div>
  </div>

<!-- These extra divs/spans may be used as catch-alls to add extra imagery. -->
<div id="extraDiv1"><span></span></div><div id="extraDiv2"><span></span></div><div id="extraDiv3"><span></span></div>
<div id="extraDiv4"><span></span></div><div id="extraDiv5"><span></span></div><div id="extraDiv6"><span></span></div>

</body></html>

 """
 
class ErroreFormato(Exception):
    pass
 
def parse(s): #metodo parser
    giorni = ["--- Lun ---", "--- Mar ---", "--- Mer ---", "--- Gio ---", "--- Ven ---"] #inizializza hash che associa le materie ai giorni
    materie = {}
    day = 0
    for g in giorni:
        materie[g] = []
    #inizia il parsing
    soup = BeautifulSoup(s)
    righe = soup.tbody.findAll('tr')
    if(len(righe)!=5):
        raise ErroreFormato
    for r in righe:
        slots = r.findAll('td')
        if(len(slots)!=4):
            raise ErroreFormato()
        for i in range(4):
            t = slots[i].findAll(text=re.compile('\w'))
            if(len(t)<=0):
                raise ErroreFormato()
            if len(t)==1:
                if(t[0]!="&nbsp;"):
                    raise ErroreFormato()
                materie[giorni[day]].append(t[0])
            else:
                if(len(t)%3!=0):
                    raise ErroreFormato()
                materie[giorni[day]].append("%".join(t) + ";")
        day = day + 1
    output = ""    
    for g in giorni:
        output += g + "\n"
        for r in materie[g]:
            output += r + "\n"             
    return output

def main():
    try:
        out = parse(html)  #inizio parsing
        print out
    except ErroreFormato:
        print('Formato HTML non riconosciuto')
        time.sleep(1)
        print('Applicazione terminata!')
        time.sleep(1)
            
main()
